﻿using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using DynamicAuditor.DTOs;

namespace DynamicAuditor.DALAuditor
    {
    /// <summary>
    /// Fecha: 26-Setiembre-2010
    /// Autor: Lester Salazar Viales
    /// Descripcion: En esta clase se va a manejar todas las operaciones correspondientes a clientes tales como: Insercion, Actualizacion, Eliminacion
    /// y todo lo relaciona con clientes.
    /// </summary>
    public class clsClientesMg
    {

        
       //Declaracion de la varaiable tipo datacontext que vamos a utilizar en toda la clase.
       DynamicAuditorDataContext bd = new DynamicAuditorDataContext();


        public clsClientesMg()
        { 
        
        }

        public List<DTOs.dtoCliente> ObtenerCliente()
        {
            int i = 0;
            List<DTOs.dtoCliente> clientes = new List<DTOs.dtoCliente>();

            try

            {
               var cli = (from p in bd.CLIENTEs
                           select p).ToList();

               foreach (CLIENTE cliente in cli)
               {
                   clientes.Add(new dtoCliente());
                   clientes[i].idCliente = cliente.IdCliente;
                   clientes[i].CodCliente = cliente.CodCliente;
                   clientes[i].Nombre = cliente.Nombre;
                   clientes[i].Telefono = cliente.Telefono;
                   clientes[i].ModificadoPor = int.Parse(cliente.ModificadoPor.ToString());
                   clientes[i].FechaModificacion = DateTime.Parse(cliente.FechaModificacion.ToString());
                   clientes[i].FechaCreacion = DateTime.Parse(cliente.FechaCreacion.ToString());
                   clientes[i].Email = cliente.Telefono;
                   clientes[i].Descripcion = cliente.Descripcion;
                   clientes[i].Activo = bool.Parse(cliente.Activo.ToString());
              
                   i++;
               }

            }
            catch(Exception ex)
            {
                throw new Exception("Ocurrio un error obteniendo los datos. " + ex.Message);
            }
            

            return clientes;
        }

        public DTOs.dtoCliente ObtenerClienteporId(int clienteid)
        {
            DTOs.dtoCliente cliente = new DynamicAuditor.DTOs.dtoCliente();

            try
            {
                CLIENTE cli = bd.CLIENTEs.Single(p => p.IdCliente == clienteid);

                cliente.idCliente = cli.IdCliente;
                cliente.CodCliente = cli.CodCliente;
                cliente.Nombre = cli.Nombre;
                cliente.Telefono = cli.Telefono;
                cliente.ModificadoPor = int.Parse(cli.ModificadoPor.ToString());
                cliente.FechaModificacion = DateTime.Parse(cli.FechaModificacion.ToString());
                cliente.FechaCreacion = DateTime.Parse(cli.FechaCreacion.ToString());
                cliente.Email = cli.Telefono;
                cliente.Descripcion = cli.Descripcion;
                cliente.Activo = bool.Parse(cli.Activo.ToString());
               

            }
            catch(Exception ex)
            {
                throw new Exception("Ocurrio un error obteniendo los datos. " + ex.Message);
            }
             
            return cliente;
        }

        public int UpdateClientes (DTOs.dtoCliente cliente)
        {

            //Se retorna un 1 si el proceso se hizo correctamente de lo contrario se retorna un 0

            int x =0;

            try
            {
                CLIENTE cli = bd.CLIENTEs.Single(p => p.IdCliente == cliente.idCliente);
                cli.Nombre = cliente.Nombre;
                cli.Activo = cliente.Activo;
                cli.CodCliente = cliente.CodCliente;
                cli.Contacto = cliente.Contacto;
                cli.Descripcion = cliente.Descripcion;
                cli.Email = cliente.Email;
                cli.FechaModificacion = cliente.FechaModificacion;
                cli.ModificadoPor = cliente.ModificadoPor;
                cli.Telefono = cliente.Telefono;

                bd.SubmitChanges();
                x = 1;

            }
            catch (Exception ex)
            {
                throw new Exception("Ocurrio un error actualizando los datos . " + ex.Message);
                
            }
          
            return x; 

        }

        public int InsertClientes(DTOs.dtoCliente clientes)
        {
            //Se retorna un 1 si el proceso se realizo correctamente de lo contrario se retorna un 0

            int x = 0;
            CLIENTE cli = new CLIENTE();

            try
            {
                cli.Nombre = clientes.Nombre;
                cli.Activo = clientes.Activo;
                cli.CodCliente = clientes.CodCliente;
                cli.Contacto = clientes.Contacto;
                cli.Descripcion = clientes.Descripcion;
                cli.Email = clientes.Email;
                cli.FechaModificacion = clientes.FechaModificacion;
                cli.ModificadoPor = clientes.ModificadoPor;
                cli.FechaCreacion = clientes.FechaCreacion;
                cli.Telefono = clientes.Telefono;

                //Se procede a insertar la informacion del cliente
                bd.CLIENTEs.InsertOnSubmit(cli);
                bd.SubmitChanges();
            }
            catch (Exception ex)
            {
                throw new Exception("No se pudo insertar el cliente. " + ex.Message);
                x = 0;
            }

            x = 1;

            return x;
        }

        public int DeleteCliente(DTOs.dtoCliente cliente)
        {
            //Se retorna un 1 si el proceso se realizo correctamente de lo contrario se retorna un 0

            int x = 0;

            try
            {
                var cli = bd.CLIENTEs.Single(p => p.IdCliente == cliente.idCliente);

                bd.CLIENTEs.DeleteOnSubmit(cli);
                bd.SubmitChanges();
                x = 1;
            }
            catch (Exception ex)
            {
                throw new Exception("No se pudo borrar el cliente " + ex.Message);
                x = 0;
            }
          

            return x;

        }

        public List<dtoCliente> ObtenerClientesActivos()
        {
            int i = 0;
            List<dtoCliente> clientesactivos = new List<dtoCliente>();

            try
            {
                var clientes = (from p in bd.CLIENTEs
                                  where p.Activo == true
                                  orderby p.IdCliente
                                  select p).ToList();
                
                //Esto aplica cuando no existan clientes activos
                if (clientes.Count.Equals(0))
                {
                    clientesactivos.Add(new dtoCliente());
                    clientesactivos[i].CodCliente = "0";
                    clientesactivos[i].Nombre = "No hay clientes registrados";
                }
                else
                {
                    foreach (CLIENTE cli in clientes)
                    {

                        clientesactivos.Add(new dtoCliente());
                        clientesactivos[i].Activo = Convert.ToBoolean(cli.Activo);
                        clientesactivos[i].CodCliente = cli.CodCliente;
                        clientesactivos[i].Contacto = cli.Contacto;
                        clientesactivos[i].Descripcion = cli.Descripcion;
                        clientesactivos[i].Email = cli.Email;
                        clientesactivos[i].FechaCreacion = Convert.ToDateTime(cli.FechaCreacion);
                        clientesactivos[i].FechaModificacion = Convert.ToDateTime(cli.FechaModificacion);
                        clientesactivos[i].idCliente = cli.IdCliente;
                        clientesactivos[i].ModificadoPor = Convert.ToInt16(cli.ModificadoPor);
                        clientesactivos[i].Nombre = cli.Nombre;
                        clientesactivos[i].Telefono = cli.Telefono;

                        i++;

                    }
                }

            }
            catch (Exception ex)
            {
                throw new Exception("No se pudo recuperar la informacion. " + ex.Message);
            }

            return clientesactivos;

        }
        
        


        
    }
}
